import request from '@/utils/request'

// ==================== 业务阶段管理 ====================
/**
 * 获取业务阶段列表
 */
export function getBusinessStages() {
  return request({
    url: '/cms/api/business_stage/',
    method: 'get'
  })
}

/**
 * 获取业务阶段详情
 */
export function getBusinessStage(id) {
  return request({
    url: `/cms/api/business_stage/${id}`,
    method: 'get'
  })
}

/**
 * 创建业务阶段
 */
export function createBusinessStage(data) {
  return request({
    url: '/cms/api/business_stage/',
    method: 'post',
    data
  })
}

/**
 * 更新业务阶段
 */
export function updateBusinessStage(id, data) {
  return request({
    url: `/cms/api/business_stage/${id}`,
    method: 'put',
    data
  })
}

/**
 * 删除业务阶段
 */
export function deleteBusinessStage(id) {
  return request({
    url: `/cms/api/business_stage/${id}`,
    method: 'delete'
  })
}

// ==================== 素材管理 ====================
/**
 * 获取素材列表
 * @param {Object} params - 查询参数
 * @param {number} params.stage_id - 业务阶段ID
 * @param {string} params.type - 素材类型
 * @param {Array} params.tag_ids - 标签ID列表
 * @param {string} params.keyword - 搜索关键词
 * @param {string} params.sort - 排序方式 (smart/newest/most_used)
 * @param {number} params.page - 页码
 * @param {number} params.page_size - 每页数量
 */
export function getBusinessMaterials(params) {
  // 处理数组参数，确保tag_ids能被正确传递
  // Django后端使用getlist来获取数组参数
  const processedParams = { ...params }
  if (processedParams.tag_ids && Array.isArray(processedParams.tag_ids)) {
    // 将数组转换为多个同名参数
    // 例如: tag_ids=[1,2,3] -> tag_ids=1&tag_ids=2&tag_ids=3
    const searchParams = new URLSearchParams()
    Object.keys(processedParams).forEach(key => {
      if (key === 'tag_ids') {
        processedParams.tag_ids.forEach(id => {
          searchParams.append('tag_ids', id)
        })
      } else if (processedParams[key] !== undefined && processedParams[key] !== null && processedParams[key] !== '') {
        searchParams.append(key, processedParams[key])
      }
    })

    return request({
      url: '/cms/api/business_material/',
      method: 'get',
      params: searchParams
    })
  }

  return request({
    url: '/cms/api/business_material/',
    method: 'get',
    params
  })
}

/**
 * 获取素材详情
 */
export function getBusinessMaterial(id) {
  return request({
    url: `/cms/api/business_material/${id}/`,
    method: 'get'
  })
}

/**
 * 创建素材
 */
export function createBusinessMaterial(data) {
  return request({
    url: '/cms/api/business_material/',
    method: 'post',
    data
  })
}

/**
 * 更新素材
 */
export function updateBusinessMaterial(id, data) {
  return request({
    url: `/cms/api/business_material/${id}`,
    method: 'put',
    data
  })
}

/**
 * 删除素材
 */
export function deleteBusinessMaterial(id) {
  return request({
    url: `/cms/api/business_material/${id}`,
    method: 'delete'
  })
}

// ==================== 个性化设置 ====================
/**
 * 设置素材偏好（收藏、排序等）
 */
export function setMaterialPreference(data) {
  return request({
    url: '/cms/api/material_preference/',
    method: 'post',
    data
  })
}

/**
 * 批量更新素材排序
 * @param {Array} sortData - [{material_id: 1, sort: 100}, ...]
 */
export function batchUpdateMaterialSort(sortData) {
  return request({
    url: '/cms/api/material_batch_sort/',
    method: 'post',
    data: { sort_data: sortData }
  })
}

// ==================== 快速搜索和推荐 ====================
/**
 * 快速搜索素材
 */
export function quickSearchMaterials(keyword, limit = 10) {
  return request({
    url: '/cms/api/material_quick_search/',
    method: 'get',
    params: { keyword, limit }
  })
}

/**
 * 获取推荐素材
 */
export function getMaterialRecommendations(params) {
  return request({
    url: '/cms/api/material_recommendations/',
    method: 'get',
    params
  })
}

// ==================== 标签管理 ====================
/**
 * 获取素材标签列表
 */
export function getMaterialTags() {
  return request({
    url: '/cms/api/material_tags/',
    method: 'get'
  })
}

// ==================== 文件上传 ====================
/**
 * 上传素材文件
 */
export function uploadMaterialFile(file, onUploadProgress) {
  const formData = new FormData()
  formData.append('file', file)

  return request({
    url: '/cms/api/upload/material/',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    },
    onUploadProgress
  })
}
